/**
 * 
 */
package com.zd.ticketing.service;

import java.util.List;
import java.util.Map;

import org.springframework.transaction.annotation.Transactional;

import com.zd.common.bean.model.TicketOrder;
import com.zd.common.service.IBaseService;
import com.zd.ticketing.bean.vo.ScenicSpotDetailVo;
import com.zd.ticketing.bean.vo.TicketOrderDetailVo;

/**
 * @author lishi
 * @date 2018年11月13日 上午11:13:32
 */
public interface ITicketOrderService extends IBaseService<TicketOrder> {
	
	/**
	 * 下订单，将购票信息订单，以及所有游客信息保存
	 * @param appid  支付公众号appid
	 * @param openid 支付公众号openid
	 * @param json 取票人，游客信息
	 * @return
	 * @throws Exception
	 */
	@Transactional(rollbackFor = Exception.class)
	Map<String, Object> buyTieckts(String appid, String openid, String json,String ip) throws Exception;
	
	/**
	 * 下单成功，修改取票，游客的状态
	 * @param orderNo 公众号下用户订单号 （唯一）
	 * @param transactionId 微信下的支付订单号 （唯一）
	 * @return
	 * @throws Exception
	 */
	@Transactional(rollbackFor = Exception.class)
	Map<String, String> modifyTiecktsStatus (String orderNo,String transactionId) throws Exception;
	
	/**
	 * 微信支付后回调信息 判断是否支付成功修改订单状态
	 * @param xmlStr 微信返回信息
	 * @throws Exception
	 */
	@Transactional(rollbackFor = Exception.class)
	void wxPayReturn(String xmlStr)throws Exception;
	
	/**
	 * 根据订单号找出景区信息
	 * @param orderNo
	 * @return
	 * @throws Exception
	 */
	ScenicSpotDetailVo getScenicSpotDetail(String orderNo)throws Exception;
	
	/**
	 * 根据订单id找出该订单的所有游客信息
	 * @param orderId 订单id
	 * @return
	 * @throws Exception
	 */
	List<TicketOrderDetailVo> getTicketOrderDetailList(Integer orderId)throws Exception;
	
	/**
	 * 根据订单id 把其状态改为已取消状态
	 * @param orderId
	 * @return
	 * @throws Exception
	 */
	Map<String, String> cancelOrder(Integer orderId)throws Exception;
	
	/**
	 * 根据订单Id，将未完成的订单再一次下单
	 * @param orderId
	 * @return
	 * @throws Exception
	 */
	Map<String, String> goDownAgain(Integer orderId,String ip)throws Exception;
	
	/**
	 * 根据身份证号码或者取票码来获取整个订单的游客信息
	 * @param userIdNumber 身份证号码
	 * @param checkCode 取票码
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> getTicketOrderDetailList(String userIdNumber,String checkCode,String deviceNo) throws Exception;
	
	/**
	 * 根据游客票务id修改已经是否打印成功的状态
	 * @param orderDetailId
	 * @return
	 * @throws Exception
	 */
	Map<String, String> updatePcprintStatus(Integer orderDetailId)throws Exception;
	
	/**
	 * 自动售票机下订单 
	 * @param userIdInfoList 游客信息
	 * @param ticketInfoId 票Id
	 * @param ip 机器IP
	 * @param appId 景区公众号
	 * @return 返回支付二维码以及票务信息
	 */
	Map<String, String> buyTiecktsPC(String userIdInfoList,Integer ticketInfoId,String ip ,String deviceNo)throws Exception;
	
	/**
	 * 查询订单是否交易成功
	 * @param orderId
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> pollingFindOrder(Integer orderId)throws Exception;
	
	/**
	 * 拿去门票信息
	 * @param orderDetailId
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> getTicket(Integer orderDetailId)throws Exception;
	
	/**
	 * 根据二维码uuid和设备信息，找寻checkCode
	 * @param uuid
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> getCheckCode(String uuid,String deviceNo)throws Exception;
	
	
}
